package com.lvwenguo.upload;

import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.List;

/**
 * @Author lvwenguo
 * @Date 2021/3/24 19:36
 * @Version 1.0
 */
@Component
public class UploadFile {

    private File uploadFileName=null; //文件名称
    private final String fileNameMp4="E://MP4/userFIle"; //上传MP4文件路径
    private final String fileNameJpg="/jpg/userFile";//图片文件路径
    private final String fileNameMp3="/mp3/userFile";//mp3文件路径
    private BufferedOutputStream bufferedOutputStream;
    /**
     * 上传图片单文件方法
     * @param multipartFile
     * @param req
     */
    public void fileUpload(MultipartFile multipartFile,HttpServletRequest req) throws Exception {
        //根据文件生成不同的文件路径，优化成为枚举最好
        uploadFileName=new File(fileNameMp4);//这里写死为MP4

        //判断上传文件夹是否创建
        if(!uploadFileName.exists()){
            //创建文件夹，这里有一点小问题！！！
            uploadFileName.mkdir();
        }
        //判断上传文件夹是否存在
        if(!ObjectUtils.isEmpty(multipartFile)){
            String originalFilename = multipartFile.getOriginalFilename();//获取上传文件后缀
            //拼接上传文件路径，注意使用算法生成！！！！
            File file = new File(uploadFileName + "/" + "111111111" + originalFilename);
            //将文件转换
            byte[] bytes = multipartFile.getBytes();
            //将文件保存在服务端
            bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(file));
            //保存文件流
            bufferedOutputStream.write(bytes);
            //刷新流
            bufferedOutputStream.flush();
            //关闭输出流
            bufferedOutputStream.close();
            //这里文件上传成功，保存数据库

            //获取文件路径名
            String name = file.getName();
            /**/

            //确保关闭流
            if(!ObjectUtils.isEmpty(bufferedOutputStream)){
            bufferedOutputStream.close();
            }
        }else{
            System.out.println("上传文件不存在！");
        }
    }
    /**
     * 上传视频单文件方法
     * @param multipartFile
     * @param req
     */
    public String fileUploadMp4(MultipartFile multipartFile,HttpServletRequest req) throws Exception {
        //根据文件生成不同的文件路径，优化成为枚举最好
        uploadFileName=new File(fileNameMp4);//这里写死为MP4

        //判断上传文件夹是否创建
        if(!uploadFileName.exists()){
            //创建文件夹，这里有一点小问题！！！
            uploadFileName.mkdir();
        }
        //判断上传文件夹是否存在
        if(!ObjectUtils.isEmpty(multipartFile)){
            String originalFilename = multipartFile.getOriginalFilename();//获取上传文件名
            //拼接上传文件路径，注意使用算法生成！！！！
            File file = new File(uploadFileName + "/" + "111111111" + originalFilename);
            //将内存中的数据写入磁盘
            multipartFile.transferTo(file);
            //这里文件上传成功，保存数据库

            //获取文件路径名
            String name = file.getPath();
            /**/

            //确保关闭流
            if(!ObjectUtils.isEmpty(bufferedOutputStream)){
                bufferedOutputStream.close();
            }
            return name;
        }else{
            System.out.println("上传文件不存在！");
            return null;
        }
    }
    /**
     * 批量文件上传
     * @param multipartFile
     * @param req
     */
    public void batchUploadFile(MultipartFile multipartFile,HttpServletRequest req) throws Exception {
        //获取前端上传的文件列表
        List<MultipartFile> files = ((MultipartHttpServletRequest) req).getFiles("file");
        //根据文件生成不同的文件路径，优化成为枚举最好
        uploadFileName=new File(fileNameMp4);//这里写死为MP4

        //判断上传文件夹是否创建
        if(!uploadFileName.exists()){
            //创建文件夹，这里有一点小问题！！！
            uploadFileName.mkdir();
        }
        if(!CollectionUtils.isEmpty(files)){
            files.stream().forEach(file->{
                try {
                    String originalFilename = file.getOriginalFilename();//获取上传文件后缀
                    //拼接上传文件路径，注意使用算法生成！！！！
                    File file1 = new File(uploadFileName + "/" + "111111111" + originalFilename);
                    //将文件转换
                    byte[] bytes = file.getBytes();
                    //将文件保存在服务端
                    bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(file1));
                    //保存文件流
                    bufferedOutputStream.write(bytes);
                    //刷新流
                    bufferedOutputStream.flush();
                    //关闭输出流
                    bufferedOutputStream.close();
                    //这里文件上传成功，保存数据库
                    //获取文件路径名
                    String name = file1.getName();

                    /**/

                }catch (Exception e) {
                    System.out.println("文件处理出错！");
                    return;
                }finally {
                    try {
                        bufferedOutputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            });
        }
    }


}
